home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programmierung
/
Power-Programmierung (Tewi)(1994).iso
/
magazine
/
pcmagazi
/
1988
/
10
/
info.asm
next >
Wrap
Assembly Source File
|
1988-05-30
|
4KB
|
90 lines
;*--------------------------------------------------------------------*
;* INFO.COM -- A DIFFERENT PAUSE FOR BATCH JOBS -- by Hal Shearer *
;*--------------------------------------------------------------------*
;* FORMAT: INFO [40 CHARACTER MESSAGE] *
;*--------------------------------------------------------------------*
CSEG SEGMENT
ASSUME CS:CSEG,DS:CSEG
ORG 100H
START: JMP INIT
STORE DB ?
MSG DB 40 DUP ('.')
BUFFER DB 'Response needed: PRESS ANY KEY TO ADVANCE'
DB 40 DUP ('.'),'$'
INIT:
PUSH SI ;save registers SI
PUSH DI ;and DI
MOV SI,80H ;point SI to the text
CLD ;go forward
CALL SPACE ;parse the spaces
CMP BYTE PTR [SI],13 ;is it a carriage control?
JE XXX ;yes - then jump
MOV CX,40 ;no, place 40 into CX
LEA DI,BUFFER ;point buffer to DI
X: LODSB ;get character from SI to AL
CMP AL,13 ;is it a carriage control char?
JE XX ;yes, then exit
STOSB ;no, store it in the buffer
LOOP X ;do process again until CX is 0
XX: INC CX ;change carriage control to '.'
MOV AL,'.' ;place a period in AL
REP STOSB ;repeat the store until CX is 0
XXX: POP DI ;restore registers DI
POP SI ;and SI
MOV AH,1 ;turn the cursor off
MOV CX,0F00H ;with this address
INT 10H
WAIT: MOV AH,2 ;place the cursor here
MOV DH,24 ;at row 24
MOV DL,19 ;column 00
INT 10H
AGAIN: MOV STORE,-1 ;set value to -1
INCR: ADD STORE,1 ;increment the value
MOV BL,STORE ;place it into BL
MOV BH,0 ;ready BX to be the index
MOV CX,39 ;going to do this 80 times
CALL POS_CURSOR ;position cursor
LOOP1: MOV AL,MSG[BX] ;put byte from msg area in AL
MOV AH,14 ;set up for teletype print
INT 10H
INC BX ;increment the index
CALL PAUSE ;lets wait awhile
MOV AH,1 ;check for a key depression
INT 16H
JZ SKIP ;if not skip it
JMP EXIT ;if so exit now
SKIP: LOOP LOOP1 ;loop back until CX is zero
CMP MSG[BX],'$' ;is the msg area at the end?
JE AGAIN ;yes, then go again
JMP INCR ;go back and start all over
SPACE: INC SI ;find first char in the text
CMP BYTE PTR [SI],32 ;is it a space?
JZ SPACE ;if so do it again
RET ;return
POS_CURSOR: ;position the cursor
PUSH BX ;save BX register
MOV AH,2 ;set up to move cursor
MOV DH,24 ;start in row 24
MOV DL,19 ;and column 00
INT 10H
POP BX ;restore BX
RET ;return
PAUSE: PUSH CX ;save CX
MOV CX,600 ;loop 300 times for pause
BACK: LOOP BACK ;loop til CX is zero
POP CX ;restore CX
RET ;return
EXIT: CALL POS_CURSOR ;prepare to erase the message
MOV CX,79
EXIT2: MOV AL,' ' ;place a blank into AL
MOV AH,14 ;prepare to teletype char
INT 10H
LOOP EXIT2 ;loop til CX is zero
MOV AH,1 ;restore the cursor
MOV CH,11 ;part of cursor in CH
MOV CL,12 ;the rest goes here in CL
INT 10H
INT 20H ;return to DOS
CSEG ENDS
END START